package base.thread;

// 多线程售票问题
public class SellTicket {
    public static void main(String[] args) {
//        SellTicket01 sellTicket01 = new SellTicket01();
//        SellTicket01 sellTicket02 = new SellTicket01();
//        SellTicket01 sellTicket03 = new SellTicket01();
//        sellTicket01.start();
//        sellTicket02.start();
//        sellTicket03.start();
        SellTicket02 sellTicket02 = new SellTicket02();
        new Thread(sellTicket02).start();
        new Thread(sellTicket02).start();
        new Thread(sellTicket02).start();
    }
}

// 超卖问题
class SellTicket01 extends Thread{
    private static int ticketNum=10;  // 静态变量，多线程共享
    @Override
    public void run() {
        // 如果不加锁 就会出现超卖的问题,也可以
//        synchronized (SellTicket01.class){
            while (true){
                if (ticketNum<=0){
                    System.out.println("售票结束....");
                    break;
                }
                // 休息
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"售票"+"剩余票数:"+(--ticketNum));
            }
        }

//    }
}


class SellTicket02 implements  Runnable{
    private  int ticketNum=10;  // 由于是使用这一个对象，所以是共享的，不用写成静态的
    @Override
    public void run() {
        // 如果不加锁 就会出现超卖的问题
//        synchronized (SellTicket01.class){
        while (true){
            if (ticketNum<=0){
                System.out.println("售票结束....");
                break;
            }
            // 休息
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"售票"+"剩余票数:"+(--ticketNum));
        }
    }

//    }
}
